package utils

import (
	"strings"

	"github.com/manifoldco/promptui"
)

var (
	templates = promptui.SelectTemplates{
		Label:    "{{ . }}?",
		Active:   "❄  {{ .Name | cyan }}",
		Inactive: "❄️{{ .Name | green }}",
		Selected: "🖥️ {{ .Name | red | cyan }}",
		Details: `
--------- Payload Detail ----------
{{ "Name:" | faint }}	{{ .Name | green }}
{{ "Descript:" | faint }}	{{ .Desc | yellow }}
-----------------------------------`,
	}

	PAYS = []Pay{
		{Name: "aix/ppc/shell_bind_tcp", Desc: "                             Listen for a connection and spawn a command shell"},
		{Name: "aix/ppc/shell_find_port", Desc: "                            Spawn a shell on an established connection"},
		{Name: "aix/ppc/shell_interact", Desc: "                             Simply execve /bin/sh (for inetd programs)"},
		{Name: "aix/ppc/shell_reverse_tcp", Desc: "                          Connect back to attacker and spawn a command shell"},
		{Name: "android/meterpreter/reverse_http", Desc: "                   Run a meterpreter server in Android. Tunnel communication over HTTP"},
		{Name: "android/meterpreter/reverse_https", Desc: "                  Run a meterpreter server in Android. Tunnel communication over HTTPS"},
		{Name: "android/meterpreter/reverse_tcp", Desc: "                    Run a meterpreter server in Android. Connect back stager"},
		{Name: "android/meterpreter_reverse_http", Desc: "                   Connect back to attacker and spawn a Meterpreter shell"},
		{Name: "android/meterpreter_reverse_https", Desc: "                  Connect back to attacker and spawn a Meterpreter shell"},
		{Name: "android/meterpreter_reverse_tcp", Desc: "                    Connect back to the attacker and spawn a Meterpreter shell"},
		{Name: "android/shell/reverse_http", Desc: "                         Spawn a piped command shell (sh). Tunnel communication over HTTP"},
		{Name: "android/shell/reverse_https", Desc: "                        Spawn a piped command shell (sh). Tunnel communication over HTTPS"},
		{Name: "android/shell/reverse_tcp", Desc: "                          Spawn a piped command shell (sh). Connect back stager"},
		{Name: "apple_ios/aarch64/meterpreter_reverse_http", Desc: "         Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "apple_ios/aarch64/meterpreter_reverse_https", Desc: "        Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "apple_ios/aarch64/meterpreter_reverse_tcp", Desc: "          Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "apple_ios/aarch64/shell_reverse_tcp", Desc: "                Connect back to attacker and spawn a command shell"},
		{Name: "apple_ios/armle/meterpreter_reverse_http", Desc: "           Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "apple_ios/armle/meterpreter_reverse_https", Desc: "          Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "apple_ios/armle/meterpreter_reverse_tcp", Desc: "            Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "bsd/sparc/shell_bind_tcp", Desc: "                           Listen for a connection and spawn a command shell"},
		{Name: "bsd/sparc/shell_reverse_tcp", Desc: "                        Connect back to attacker and spawn a command shell"},
		{Name: "bsd/vax/shell_reverse_tcp", Desc: "                          Connect back to attacker and spawn a command shell"},
		{Name: "bsd/x64/exec", Desc: "                                       Execute an arbitrary command"},
		{Name: "bsd/x64/shell_bind_ipv6_tcp", Desc: "                        Listen for a connection and spawn a command shell over IPv6"},
		{Name: "bsd/x64/shell_bind_tcp", Desc: "                             Bind an arbitrary command to an arbitrary port"},
		{Name: "bsd/x64/shell_bind_tcp_small", Desc: "                       Listen for a connection and spawn a command shell"},
		{Name: "bsd/x64/shell_reverse_ipv6_tcp", Desc: "                     Connect back to attacker and spawn a command shell over IPv6"},
		{Name: "bsd/x64/shell_reverse_tcp", Desc: "                          Connect back to attacker and spawn a command shell"},
		{Name: "bsd/x64/shell_reverse_tcp_small", Desc: "                    Connect back to attacker and spawn a command shell"},
		{Name: "bsd/x86/exec", Desc: "                                       Execute an arbitrary command"},
		{Name: "bsd/x86/metsvc_bind_tcp", Desc: "                            Stub payload for interacting with a Meterpreter Service"},
		{Name: "bsd/x86/metsvc_reverse_tcp", Desc: "                         Stub payload for interacting with a Meterpreter Service"},
		{Name: "bsd/x86/shell/bind_ipv6_tcp", Desc: "                        Spawn a command shell (staged). Listen for a connection over IPv6"},
		{Name: "bsd/x86/shell/bind_tcp", Desc: "                             Spawn a command shell (staged). Listen for a connection"},
		{Name: "bsd/x86/shell/find_tag", Desc: "                             Spawn a command shell (staged). Use an established connection"},
		{Name: "bsd/x86/shell/reverse_ipv6_tcp", Desc: "                     Spawn a command shell (staged). Connect back to the attacker over IPv6"},
		{Name: "bsd/x86/shell/reverse_tcp", Desc: "                          Spawn a command shell (staged). Connect back to the attacker"},
		{Name: "bsd/x86/shell_bind_tcp", Desc: "                             Listen for a connection and spawn a command shell"},
		{Name: "bsd/x86/shell_bind_tcp_ipv6", Desc: "                        Listen for a connection and spawn a command shell over IPv6"},
		{Name: "bsd/x86/shell_find_port", Desc: "                            Spawn a shell on an established connection"},
		{Name: "bsd/x86/shell_find_tag", Desc: "                             Spawn a shell on an established connection (proxy/nat safe)"},
		{Name: "bsd/x86/shell_reverse_tcp", Desc: "                          Connect back to attacker and spawn a command shell"},
		{Name: "bsd/x86/shell_reverse_tcp_ipv6", Desc: "                     Connect back to attacker and spawn a command shell over IPv6"},
		{Name: "bsdi/x86/shell/bind_tcp", Desc: "                            Spawn a command shell (staged). Listen for a connection"},
		{Name: "bsdi/x86/shell/reverse_tcp", Desc: "                         Spawn a command shell (staged). Connect back to the attacker"},
		{Name: "bsdi/x86/shell_bind_tcp", Desc: "                            Listen for a connection and spawn a command shell"},
		{Name: "bsdi/x86/shell_find_port", Desc: "                           Spawn a shell on an established connection"},
		{Name: "bsdi/x86/shell_reverse_tcp", Desc: "                         Connect back to attacker and spawn a command shell"},
		{Name: "cmd/mainframe/apf_privesc_jcl", Desc: "                      (Elevate privileges for user. Adds SYSTEM SPECIAL and BPX.SUPERUSER to user profile. Does this by u... privesc only works with z/OS systems using RACF, no other ESM is supported.)"},
		{Name: "cmd/mainframe/bind_shell_jcl", Desc: "                       Provide JCL which creates a bind shell This implmentation does not include ebcdic character translation, so a client with translation capabilities is required. MSF handles this automatically."},
		{Name: "cmd/mainframe/generic_jcl", Desc: "                          Provide JCL which can be used to submit a job to JES2 on z/OS which will exit and return 0. This can be used as a template for other JCL based payloads"},
		{Name: "cmd/mainframe/reverse_shell_jcl", Desc: "                    Provide JCL which creates a reverse shell This implementation does not include ebcdic character translation, so a client with translation capabilities is required. MSF handles this automatically."},
		{Name: "cmd/unix/bind_awk", Desc: "                                  Listen for a connection and spawn a command shell via GNU AWK"},
		{Name: "cmd/unix/bind_busybox_telnetd", Desc: "                      Listen for a connection and spawn a command shell via BusyBox telnetd"},
		{Name: "cmd/unix/bind_inetd", Desc: "                                Listen for a connection and spawn a command shell (persistent)"},
		{Name: "cmd/unix/bind_jjs", Desc: "                                  Listen for a connection and spawn a command shell via jjs"},
		{Name: "cmd/unix/bind_lua", Desc: "                                  Listen for a connection and spawn a command shell via Lua"},
		{Name: "cmd/unix/bind_netcat", Desc: "                               Listen for a connection and spawn a command shell via netcat"},
		{Name: "cmd/unix/bind_netcat_gaping", Desc: "                        Listen for a connection and spawn a command shell via netcat"},
		{Name: "cmd/unix/bind_netcat_gaping_ipv6", Desc: "                   Listen for a connection and spawn a command shell via netcat"},
		{Name: "cmd/unix/bind_nodejs", Desc: "                               Continually listen for a connection and spawn a command shell via nodejs"},
		{Name: "cmd/unix/bind_perl", Desc: "                                 Listen for a connection and spawn a command shell via perl"},
		{Name: "cmd/unix/bind_perl_ipv6", Desc: "                            Listen for a connection and spawn a command shell via perl"},
		{Name: "cmd/unix/bind_r", Desc: "                                    Continually listen for a connection and spawn a command shell via R"},
		{Name: "cmd/unix/bind_ruby", Desc: "                                 Continually listen for a connection and spawn a command shell via Ruby"},
		{Name: "cmd/unix/bind_ruby_ipv6", Desc: "                            Continually listen for a connection and spawn a command shell via Ruby"},
		{Name: "cmd/unix/bind_socat_udp", Desc: "                            Creates an interactive shell via socat"},
		{Name: "cmd/unix/bind_stub", Desc: "                                 Listen for a connection and spawn a command shell (stub only, no payload)"},
		{Name: "cmd/unix/bind_zsh", Desc: "                                  Listen for a connection and spawn a command shell via Zsh. Note: Although Zsh is often available, please be aware it isn't usually installed by default."},
		{Name: "cmd/unix/generic", Desc: "                                   Executes the supplied command"},
		{Name: "cmd/unix/interact", Desc: "                                  Interacts with a shell on an established socket connection"},
		{Name: "cmd/unix/pingback_bind", Desc: "                             Accept a connection, send a UUID, then exit"},
		{Name: "cmd/unix/pingback_reverse", Desc: "                          Creates a socket, send a UUID, then exit"},
		{Name: "cmd/unix/reverse", Desc: "                                   Creates an interactive shell through two inbound connections"},
		{Name: "cmd/unix/reverse_awk", Desc: "                               Creates an interactive shell via GNU AWK"},
		{Name: "cmd/unix/reverse_bash", Desc: "                              Creates an interactive shell via bash's builtin /dev/tcp. This will not work on circa 2009 and older Debian-based Linux di...pile bash without the /dev/tcp feature."},
		{Name: "cmd/unix/reverse_bash_telnet_ssl", Desc: "                   Creates an interactive shell via mkfifo and telnet. This method works on Debian and other systems compiled without /dev/...s the '-z' option included on some systems to encrypt using SSL."},
		{Name: "cmd/unix/reverse_bash_udp", Desc: "                          Creates an interactive shell via bash's builtin /dev/udp. This will not work on circa 2009 and older Debian-based Linux dis...e they compile bash without the /dev/udp feature."},
		{Name: "cmd/unix/reverse_jjs", Desc: "                               Connect back and create a command shell via jjs"},
		{Name: "cmd/unix/reverse_ksh", Desc: "                               Connect back and create a command shell via Ksh. Note: Although Ksh is often available, please be aware it isn't usually installed by default."},
		{Name: "cmd/unix/reverse_lua", Desc: "                               Creates an interactive shell via Lua"},
		{Name: "cmd/unix/reverse_ncat_ssl", Desc: "                          Creates an interactive shell via ncat, utilizing ssl mode"},
		{Name: "cmd/unix/reverse_netcat", Desc: "                            Creates an interactive shell via netcat"},
		{Name: "cmd/unix/reverse_netcat_gaping", Desc: "                     Creates an interactive shell via netcat"},
		{Name: "cmd/unix/reverse_nodejs", Desc: "                            Continually listen for a connection and spawn a command shell via nodejs"},
		{Name: "cmd/unix/reverse_openssl", Desc: "                           Creates an interactive shell through two inbound connections"},
		{Name: "cmd/unix/reverse_perl", Desc: "                              Creates an interactive shell via perl"},
		{Name: "cmd/unix/reverse_perl_ssl", Desc: "                          Creates an interactive shell via perl, uses SSL"},
		{Name: "cmd/unix/reverse_php_ssl", Desc: "                           Creates an interactive shell via php, uses SSL"},
		{Name: "cmd/unix/reverse_python", Desc: "                            Connect back and create a command shell via Python"},
		{Name: "cmd/unix/reverse_python_ssl", Desc: "                        Creates an interactive shell via python, uses SSL, encodes with base64 by design."},
		{Name: "cmd/unix/reverse_r", Desc: "                                 Connect back and create a command shell via R"},
		{Name: "cmd/unix/reverse_ruby", Desc: "                              Connect back and create a command shell via Ruby"},
		{Name: "cmd/unix/reverse_ruby_ssl", Desc: "                          Connect back and create a command shell via Ruby, uses SSL"},
		{Name: "cmd/unix/reverse_socat_udp", Desc: "                         Creates an interactive shell via socat"},
		{Name: "cmd/unix/reverse_ssh", Desc: "                               Connect back and create a command shell via SSH"},
		{Name: "cmd/unix/reverse_ssl_double_telnet", Desc: "                 Creates an interactive shell through two inbound connections, encrypts using SSL via \"-z\" option"},
		{Name: "cmd/unix/reverse_stub", Desc: "                              Creates an interactive shell through an inbound connection (stub only, no payload)"},
		{Name: "cmd/unix/reverse_tclsh", Desc: "                             Creates an interactive shell via Tclsh"},
		{Name: "cmd/unix/reverse_zsh", Desc: "                               Connect back and create a command shell via Zsh. Note: Although Zsh is often available, please be aware it isn't usually installed by default."},
		{Name: "cmd/windows/adduser", Desc: "                                Create a new user and add them to local administration group. Note: The specified ...s. Complexity check: 8-14 chars (1 UPPER, 1 lower, 1 digit/special)"},
		{Name: "cmd/windows/bind_lua", Desc: "                               Listen for a connection and spawn a command shell via Lua"},
		{Name: "cmd/windows/bind_perl", Desc: "                              Listen for a connection and spawn a command shell via perl (persistent)"},
		{Name: "cmd/windows/bind_perl_ipv6", Desc: "                         Listen for a connection and spawn a command shell via perl (persistent)"},
		{Name: "cmd/windows/bind_ruby", Desc: "                              Continually listen for a connection and spawn a command shell via Ruby"},
		{Name: "cmd/windows/download_eval_vbs", Desc: "                      Downloads a file from an HTTP(S) URL and executes it as a vbs script. Use it to stage a vbs encoded payload from a short command line."},
		{Name: "cmd/windows/download_exec_vbs", Desc: "                      Download an EXE from an HTTP(S) URL and execute it"},
		{Name: "cmd/windows/generic", Desc: "                                Executes the supplied command"},
		{Name: "cmd/windows/powershell_bind_tcp", Desc: "                    Interacts with a powershell session on an established socket connection"},
		{Name: "cmd/windows/powershell_reverse_tcp", Desc: "                 Interacts with a powershell session on an established socket connection"},
		{Name: "cmd/windows/reverse_lua", Desc: "                            Creates an interactive shell via Lua"},
		{Name: "cmd/windows/reverse_perl", Desc: "                           Creates an interactive shell via perl"},
		{Name: "cmd/windows/reverse_powershell", Desc: "                     Connect back and create a command shell via Powershell"},
		{Name: "cmd/windows/reverse_ruby", Desc: "                           Connect back and create a command shell via Ruby"},
		{Name: "firefox/exec", Desc: "                                       This module runs a shell command on the target OS without touching the disk. O...cher\" to disk that hides the prompt."},
		{Name: "firefox/shell_bind_tcp", Desc: "                             Creates an interactive shell via Javascript with access to Firefox's XPCOM API"},
		{Name: "firefox/shell_reverse_tcp", Desc: "                          Creates an interactive shell via Javascript with access to Firefox's XPCOM API"},
		{Name: "generic/custom", Desc: "                                     Use custom string or file as payload. Set either PAYLOADFILE or PAYLOADSTR."},
		{Name: "generic/debug_trap", Desc: "                                 Generate a debug trap in the target process"},
		{Name: "generic/shell_bind_tcp", Desc: "                             Listen for a connection and spawn a command shell"},
		{Name: "generic/shell_reverse_tcp", Desc: "                          Connect back to attacker and spawn a command shell"},
		{Name: "generic/tight_loop", Desc: "                                 Generate a tight loop in the target process"},
		{Name: "java/jsp_shell_bind_tcp", Desc: "                            Listen for a connection and spawn a command shell"},
		{Name: "java/jsp_shell_reverse_tcp", Desc: "                         Connect back to attacker and spawn a command shell"},
		{Name: "java/meterpreter/bind_tcp", Desc: "                          Run a meterpreter server in Java. Listen for a connection"},
		{Name: "java/meterpreter/reverse_http", Desc: "                      Run a meterpreter server in Java. Tunnel communication over HTTP"},
		{Name: "java/meterpreter/reverse_https", Desc: "                     Run a meterpreter server in Java. Tunnel communication over HTTPS"},
		{Name: "java/meterpreter/reverse_tcp", Desc: "                       Run a meterpreter server in Java. Connect back stager"},
		{Name: "java/shell/bind_tcp", Desc: "                                Spawn a piped command shell (cmd.exe on Windows, /bin/sh everywhere else). Listen for a connection"},
		{Name: "java/shell/reverse_tcp", Desc: "                             Spawn a piped command shell (cmd.exe on Windows, /bin/sh everywhere else). Connect back stager"},
		{Name: "java/shell_reverse_tcp", Desc: "                             Connect back to attacker and spawn a command shell"},
		{Name: "linux/aarch64/meterpreter/reverse_tcp", Desc: "              Inject the mettle server payload (staged). Connect back to the attacker"},
		{Name: "linux/aarch64/meterpreter_reverse_http", Desc: "             Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "linux/aarch64/meterpreter_reverse_https", Desc: "            Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "linux/aarch64/meterpreter_reverse_tcp", Desc: "              Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "linux/aarch64/shell/reverse_tcp", Desc: "                    dup2 socket in x12, then execve. Connect back to the attacker"},
		{Name: "linux/aarch64/shell_reverse_tcp", Desc: "                    Connect back to attacker and spawn a command shell"},
		{Name: "linux/armbe/meterpreter_reverse_http", Desc: "               Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "linux/armbe/meterpreter_reverse_https", Desc: "              Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "linux/armbe/meterpreter_reverse_tcp", Desc: "                Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "linux/armbe/shell_bind_tcp", Desc: "                         Listen for a connection and spawn a command shell"},
		{Name: "linux/armle/adduser", Desc: "                                Create a new user with UID 0"},
		{Name: "linux/armle/exec", Desc: "                                   Execute an arbitrary command"},
		{Name: "linux/armle/meterpreter/bind_tcp", Desc: "                   Inject the mettle server payload (staged). Listen for a connection"},
		{Name: "linux/armle/meterpreter/reverse_tcp", Desc: "                Inject the mettle server payload (staged). Connect back to the attacker"},
		{Name: "linux/armle/meterpreter_reverse_http", Desc: "               Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "linux/armle/meterpreter_reverse_https", Desc: "              Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "linux/armle/meterpreter_reverse_tcp", Desc: "                Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "linux/armle/shell/bind_tcp", Desc: "                         dup2 socket in r12, then execve. Listen for a connection"},
		{Name: "linux/armle/shell/reverse_tcp", Desc: "                      dup2 socket in r12, then execve. Connect back to the attacker"},
		{Name: "linux/armle/shell_bind_tcp", Desc: "                         Connect to target and spawn a command shell"},
		{Name: "linux/armle/shell_reverse_tcp", Desc: "                      Connect back to attacker and spawn a command shell"},
		{Name: "linux/mips64/meterpreter_reverse_http", Desc: "              Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "linux/mips64/meterpreter_reverse_https", Desc: "             Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "linux/mips64/meterpreter_reverse_tcp", Desc: "               Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "linux/mipsbe/exec", Desc: "                                  A very small shellcode for executing commands. This module is sometimes helpful for testing purposes."},
		{Name: "linux/mipsbe/meterpreter/reverse_tcp", Desc: "               Inject the mettle server payload (staged). Connect back to the attacker"},
		{Name: "linux/mipsbe/meterpreter_reverse_http", Desc: "              Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "linux/mipsbe/meterpreter_reverse_https", Desc: "             Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "linux/mipsbe/meterpreter_reverse_tcp", Desc: "               Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "linux/mipsbe/reboot", Desc: "                                A very small shellcode for rebooting the system. This payload is sometimes helpful for testing purposes or executing other payloads that rely on initial startup procedures."},
		{Name: "linux/mipsbe/shell/reverse_tcp", Desc: "                     Spawn a command shell (staged). Connect back to the attacker"},
		{Name: "linux/mipsbe/shell_bind_tcp", Desc: "                        Listen for a connection and spawn a command shell"},
		{Name: "linux/mipsbe/shell_reverse_tcp", Desc: "                     Connect back to attacker and spawn a command shell"},
		{Name: "linux/mipsle/exec", Desc: "                                  A very small shellcode for executing commands. This module is sometimes helpful for testing purposes as well as on targets with extremely limited buffer space."},
		{Name: "linux/mipsle/meterpreter/reverse_tcp", Desc: "               Inject the mettle server payload (staged). Connect back to the attacker"},
		{Name: "linux/mipsle/meterpreter_reverse_http", Desc: "              Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "linux/mipsle/meterpreter_reverse_https", Desc: "             Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "linux/mipsle/meterpreter_reverse_tcp", Desc: "               Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "linux/mipsle/reboot", Desc: "                                A very small shellcode for rebooting the system. This payload is sometimes helpful for testing purposes."},
		{Name: "linux/mipsle/shell/reverse_tcp", Desc: "                     Spawn a command shell (staged). Connect back to the attacker"},
		{Name: "linux/mipsle/shell_bind_tcp", Desc: "                        Listen for a connection and spawn a command shell"},
		{Name: "linux/mipsle/shell_reverse_tcp", Desc: "                     Connect back to attacker and spawn a command shell"},
		{Name: "linux/ppc/meterpreter_reverse_http", Desc: "                 Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "linux/ppc/meterpreter_reverse_https", Desc: "                Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "linux/ppc/meterpreter_reverse_tcp", Desc: "                  Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "linux/ppc/shell_bind_tcp", Desc: "                           Listen for a connection and spawn a command shell"},
		{Name: "linux/ppc/shell_find_port", Desc: "                          Spawn a shell on an established connection"},
		{Name: "linux/ppc/shell_reverse_tcp", Desc: "                        Connect back to attacker and spawn a command shell"},
		{Name: "linux/ppc64/shell_bind_tcp", Desc: "                         Listen for a connection and spawn a command shell"},
		{Name: "linux/ppc64/shell_find_port", Desc: "                        Spawn a shell on an established connection"},
		{Name: "linux/ppc64/shell_reverse_tcp", Desc: "                      Connect back to attacker and spawn a command shell"},
		{Name: "linux/ppc64le/meterpreter_reverse_http", Desc: "             Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "linux/ppc64le/meterpreter_reverse_https", Desc: "            Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "linux/ppc64le/meterpreter_reverse_tcp", Desc: "              Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "linux/ppce500v2/meterpreter_reverse_http", Desc: "           Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "linux/ppce500v2/meterpreter_reverse_https", Desc: "          Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "linux/ppce500v2/meterpreter_reverse_tcp", Desc: "            Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "linux/x64/exec", Desc: "                                     Execute an arbitrary command"},
		{Name: "linux/x64/meterpreter/bind_tcp", Desc: "                     Inject the mettle server payload (staged). Listen for a connection"},
		{Name: "linux/x64/meterpreter/reverse_tcp", Desc: "                  Inject the mettle server payload (staged). Connect back to the attacker"},
		{Name: "linux/x64/meterpreter_reverse_http", Desc: "                 Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "linux/x64/meterpreter_reverse_https", Desc: "                Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "linux/x64/meterpreter_reverse_tcp", Desc: "                  Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "linux/x64/pingback_bind_tcp", Desc: "                        Accept a connection from attacker and report UUID (Linux x64)"},
		{Name: "linux/x64/pingback_reverse_tcp", Desc: "                     Connect back to attacker and report UUID (Linux x64)"},
		{Name: "linux/x64/shell/bind_tcp", Desc: "                           Spawn a command shell (staged). Listen for a connection"},
		{Name: "linux/x64/shell/reverse_tcp", Desc: "                        Spawn a command shell (staged). Connect back to the attacker"},
		{Name: "linux/x64/shell_bind_ipv6_tcp", Desc: "                      Listen for an IPv6 connection and spawn a command shell"},
		{Name: "linux/x64/shell_bind_tcp", Desc: "                           Listen for a connection and spawn a command shell"},
		{Name: "linux/x64/shell_bind_tcp_random_port", Desc: "               Listen for a connection in a random port and spawn a command shell. Use nmap to discover the open port: 'nmap -sS target -p-'."},
		{Name: "linux/x64/shell_find_port", Desc: "                          Spawn a shell on an established connection"},
		{Name: "linux/x64/shell_reverse_ipv6_tcp", Desc: "                   Connect back to attacker and spawn a command shell over IPv6"},
		{Name: "linux/x64/shell_reverse_tcp", Desc: "                        Connect back to attacker and spawn a command shell"},
		{Name: "linux/x86/adduser", Desc: "                                  Create a new user with UID 0"},
		{Name: "linux/x86/chmod", Desc: "                                    Runs chmod on specified file with specified mode"},
		{Name: "linux/x86/exec", Desc: "                                     Execute an arbitrary command"},
		{Name: "linux/x86/meterpreter/bind_ipv6_tcp", Desc: "                Inject the mettle server payload (staged). Listen for an IPv6 connection (Linux x86)"},
		{Name: "linux/x86/meterpreter/bind_ipv6_tcp_uuid", Desc: "           Inject the mettle server payload (staged). Listen for an IPv6 connection with UUID Support (Linux x86)"},
		{Name: "linux/x86/meterpreter/bind_nonx_tcp", Desc: "                Inject the mettle server payload (staged). Listen for a connection"},
		{Name: "linux/x86/meterpreter/bind_tcp", Desc: "                     Inject the mettle server payload (staged). Listen for a connection (Linux x86)"},
		{Name: "linux/x86/meterpreter/bind_tcp_uuid", Desc: "                Inject the mettle server payload (staged). Listen for a connection with UUID Support (Linux x86)"},
		{Name: "linux/x86/meterpreter/find_tag", Desc: "                     Inject the mettle server payload (staged). Use an established connection"},
		{Name: "linux/x86/meterpreter/reverse_ipv6_tcp", Desc: "             Inject the mettle server payload (staged). Connect back to attacker over IPv6"},
		{Name: "linux/x86/meterpreter/reverse_nonx_tcp", Desc: "             Inject the mettle server payload (staged). Connect back to the attacker"},
		{Name: "linux/x86/meterpreter/reverse_tcp", Desc: "                  Inject the mettle server payload (staged). Connect back to the attacker"},
		{Name: "linux/x86/meterpreter/reverse_tcp_uuid", Desc: "             Inject the mettle server payload (staged). Connect back to the attacker"},
		{Name: "linux/x86/meterpreter_reverse_http", Desc: "                 Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "linux/x86/meterpreter_reverse_https", Desc: "                Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "linux/x86/meterpreter_reverse_tcp", Desc: "                  Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "linux/x86/metsvc_bind_tcp", Desc: "                          Stub payload for interacting with a Meterpreter Service"},
		{Name: "linux/x86/metsvc_reverse_tcp", Desc: "                       Stub payload for interacting with a Meterpreter Service"},
		{Name: "linux/x86/read_file", Desc: "                                Read up to 4096 bytes from the local file system and write it back out to the specified file descriptor"},
		{Name: "linux/x86/shell/bind_ipv6_tcp", Desc: "                      Spawn a command shell (staged). Listen for an IPv6 connection (Linux x86)"},
		{Name: "linux/x86/shell/bind_ipv6_tcp_uuid", Desc: "                 Spawn a command shell (staged). Listen for an IPv6 connection with UUID Support (Linux x86)"},
		{Name: "linux/x86/shell/bind_nonx_tcp", Desc: "                      Spawn a command shell (staged). Listen for a connection"},
		{Name: "linux/x86/shell/bind_tcp", Desc: "                           Spawn a command shell (staged). Listen for a connection (Linux x86)"},
		{Name: "linux/x86/shell/bind_tcp_uuid", Desc: "                      Spawn a command shell (staged). Listen for a connection with UUID Support (Linux x86)"},
		{Name: "linux/x86/shell/find_tag", Desc: "                           Spawn a command shell (staged). Use an established connection"},
		{Name: "linux/x86/shell/reverse_ipv6_tcp", Desc: "                   Spawn a command shell (staged). Connect back to attacker over IPv6"},
		{Name: "linux/x86/shell/reverse_nonx_tcp", Desc: "                   Spawn a command shell (staged). Connect back to the attacker"},
		{Name: "linux/x86/shell/reverse_tcp", Desc: "                        Spawn a command shell (staged). Connect back to the attacker"},
		{Name: "linux/x86/shell/reverse_tcp_uuid", Desc: "                   Spawn a command shell (staged). Connect back to the attacker"},
		{Name: "linux/x86/shell_bind_ipv6_tcp", Desc: "                      Listen for a connection over IPv6 and spawn a command shell"},
		{Name: "linux/x86/shell_bind_tcp", Desc: "                           Listen for a connection and spawn a command shell"},
		{Name: "linux/x86/shell_bind_tcp_random_port", Desc: "               Listen for a connection in a random port and spawn a command shell. Use nmap to discover the open port: 'nmap -sS target -p-'."},
		{Name: "linux/x86/shell_find_port", Desc: "                          Spawn a shell on an established connection"},
		{Name: "linux/x86/shell_find_tag", Desc: "                           Spawn a shell on an established connection (proxy/nat safe)"},
		{Name: "linux/x86/shell_reverse_tcp", Desc: "                        Connect back to attacker and spawn a command shell"},
		{Name: "linux/x86/shell_reverse_tcp_ipv6", Desc: "                   Connect back to attacker and spawn a command shell over IPv6"},
		{Name: "linux/zarch/meterpreter_reverse_http", Desc: "               Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "linux/zarch/meterpreter_reverse_https", Desc: "              Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "linux/zarch/meterpreter_reverse_tcp", Desc: "                Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "mainframe/shell_reverse_tcp", Desc: "                        Listen for a connection and spawn a command shell. This implementation does not include ebcdic....F handles this automatically."},
		{Name: "multi/meterpreter/reverse_http", Desc: "                     Handle Meterpreter sessions regardless of the target arch/platform. Tunnel communication over HTTP"},
		{Name: "multi/meterpreter/reverse_https", Desc: "                    Handle Meterpreter sessions regardless of the target arch/platform. Tunnel communication over HTTPS"},
		{Name: "netware/shell/reverse_tcp", Desc: "                          Connect to the NetWare console (staged). Connect back to the attacker"},
		{Name: "nodejs/shell_bind_tcp", Desc: "                              Creates an interactive shell via nodejs"},
		{Name: "nodejs/shell_reverse_tcp", Desc: "                           Creates an interactive shell via nodejs"},
		{Name: "nodejs/shell_reverse_tcp_ssl", Desc: "                       Creates an interactive shell via nodejs, uses SSL"},
		{Name: "osx/armle/execute/bind_tcp", Desc: "                         Spawn a command shell (staged). Listen for a connection"},
		{Name: "osx/armle/execute/reverse_tcp", Desc: "                      Spawn a command shell (staged). Connect back to the attacker"},
		{Name: "osx/armle/shell/bind_tcp", Desc: "                           Spawn a command shell (staged). Listen for a connection"},
		{Name: "osx/armle/shell/reverse_tcp", Desc: "                        Spawn a command shell (staged). Connect back to the attacker"},
		{Name: "osx/armle/shell_bind_tcp", Desc: "                           Listen for a connection and spawn a command shell"},
		{Name: "osx/armle/shell_reverse_tcp", Desc: "                        Connect back to attacker and spawn a command shell"},
		{Name: "osx/armle/vibrate", Desc: "                                  Causes the iPhone to vibrate, only works when the AudioToolkit library has been loaded. Based on work by Charlie Miller <cmiller[at]securityevaluators.com>."},
		{Name: "osx/ppc/shell/bind_tcp", Desc: "                             Spawn a command shell (staged). Listen for a connection"},
		{Name: "osx/ppc/shell/find_tag", Desc: "                             Spawn a command shell (staged). Use an established connection"},
		{Name: "osx/ppc/shell/reverse_tcp", Desc: "                          Spawn a command shell (staged). Connect back to the attacker"},
		{Name: "osx/ppc/shell_bind_tcp", Desc: "                             Listen for a connection and spawn a command shell"},
		{Name: "osx/ppc/shell_reverse_tcp", Desc: "                          Connect back to attacker and spawn a command shell"},
		{Name: "osx/x64/dupandexecve/bind_tcp", Desc: "                      dup2 socket in edi, then execve. Listen, read length, read buffer, execute"},
		{Name: "osx/x64/dupandexecve/reverse_tcp", Desc: "                   dup2 socket in edi, then execve. Connect, read length, read buffer, execute"},
		{Name: "osx/x64/dupandexecve/reverse_tcp_uuid", Desc: "              dup2 socket in edi, then execve. Connect back to the attacker with UUID Support (OSX x64)"},
		{Name: "osx/x64/exec", Desc: "                                       Execute an arbitrary command"},
		{Name: "osx/x64/meterpreter/bind_tcp", Desc: "                       Inject the mettle server payload (staged). Listen, read length, read buffer, execute"},
		{Name: "osx/x64/meterpreter/reverse_tcp", Desc: "                    Inject the mettle server payload (staged). Connect, read length, read buffer, execute"},
		{Name: "osx/x64/meterpreter/reverse_tcp_uuid", Desc: "               Inject the mettle server payload (staged). Connect back to the attacker with UUID Support (OSX x64)"},
		{Name: "osx/x64/meterpreter_reverse_http", Desc: "                   Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "osx/x64/meterpreter_reverse_https", Desc: "                  Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "osx/x64/meterpreter_reverse_tcp", Desc: "                    Run the Meterpreter / Mettle server payload (stageless)"},
		{Name: "osx/x64/say", Desc: "                                        Say an arbitrary string outloud using Mac OS X text2speech"},
		{Name: "osx/x64/shell_bind_tcp", Desc: "                             Bind an arbitrary command to an arbitrary port"},
		{Name: "osx/x64/shell_find_tag", Desc: "                             Spawn a shell on an established connection (proxy/nat safe)"},
		{Name: "osx/x64/shell_reverse_tcp", Desc: "                          Connect back to attacker and spawn a command shell"},
		{Name: "osx/x86/bundleinject/bind_tcp", Desc: "                      Inject a custom Mach-O bundle into the exploited process. Listen, read length, read buffer, execute"},
		{Name: "osx/x86/bundleinject/reverse_tcp", Desc: "                   Inject a custom Mach-O bundle into the exploited process. Connect, read length, read buffer, execute"},
		{Name: "osx/x86/exec", Desc: "                                       Execute an arbitrary command"},
		{Name: "osx/x86/isight/bind_tcp", Desc: "                            Inject a Mach-O bundle to capture a photo from the iSight (staged). Listen, read length, read buffer, execute"},
		{Name: "osx/x86/isight/reverse_tcp", Desc: "                         Inject a Mach-O bundle to capture a photo from the iSight (staged). Connect, read length, read buffer, execute"},
		{Name: "osx/x86/shell_bind_tcp", Desc: "                             Listen for a connection and spawn a command shell"},
		{Name: "osx/x86/shell_find_port", Desc: "                            Spawn a shell on an established connection"},
		{Name: "osx/x86/shell_reverse_tcp", Desc: "                          Connect back to attacker and spawn a command shell"},
		{Name: "osx/x86/vforkshell/bind_tcp", Desc: "                        Call vfork() if necessary and spawn a command shell (staged). Listen, read length, read buffer, execute"},
		{Name: "osx/x86/vforkshell/reverse_tcp", Desc: "                     Call vfork() if necessary and spawn a command shell (staged). Connect, read length, read buffer, execute"},
		{Name: "osx/x86/vforkshell_bind_tcp", Desc: "                        Listen for a connection, vfork if necessary, and spawn a command shell"},
		{Name: "osx/x86/vforkshell_reverse_tcp", Desc: "                     Connect back to attacker, vfork if necessary, and spawn a command shell"},
		{Name: "php/bind_perl", Desc: "                                      Listen for a connection and spawn a command shell via perl (persistent)"},
		{Name: "php/bind_perl_ipv6", Desc: "                                 Listen for a connection and spawn a command shell via perl (persistent) over IPv6"},
		{Name: "php/bind_php", Desc: "                                       Listen for a connection and spawn a command shell via php"},
		{Name: "php/bind_php_ipv6", Desc: "                                  Listen for a connection and spawn a command shell via php (IPv6)"},
		{Name: "php/download_exec", Desc: "                                  Download an EXE from an HTTP URL and execute it"},
		{Name: "php/exec", Desc: "                                           Execute a single system command"},
		{Name: "php/meterpreter/bind_tcp", Desc: "                           Run a meterpreter server in PHP. Listen for a connection"},
		{Name: "php/meterpreter/bind_tcp_ipv6", Desc: "                      Run a meterpreter server in PHP. Listen for a connection over IPv6"},
		{Name: "php/meterpreter/bind_tcp_ipv6_uuid", Desc: "                 Run a meterpreter server in PHP. Listen for a connection over IPv6 with UUID Support"},
		{Name: "php/meterpreter/bind_tcp_uuid", Desc: "                      Run a meterpreter server in PHP. Listen for a connection with UUID Support"},
		{Name: "php/meterpreter/reverse_tcp", Desc: "                        Run a meterpreter server in PHP. Reverse PHP connect back stager with checks for disabled functions"},
		{Name: "php/meterpreter/reverse_tcp_uuid", Desc: "                   Run a meterpreter server in PHP. Reverse PHP connect back stager with checks for disabled functions"},
		{Name: "php/meterpreter_reverse_tcp", Desc: "                        Connect back to attacker and spawn a Meterpreter server (PHP)"},
		{Name: "php/reverse_perl", Desc: "                                   Creates an interactive shell via perl"},
		{Name: "php/reverse_php", Desc: "                                    Reverse PHP connect back shell with checks for disabled functions"},
		{Name: "php/shell_findsock", Desc: "                                 Spawn a shell on the established connection to the webserver. Unfortunately, this payload can leave cons...ght work on other web servers that leak file descriptors to child processes."},
		{Name: "python/meterpreter/bind_tcp", Desc: "                        Run a meterpreter server in Python (2.5-2.7 & 3.1-3.6). Listen for a connection"},
		{Name: "python/meterpreter/bind_tcp_uuid", Desc: "                   Run a meterpreter server in Python (2.5-2.7 & 3.1-3.6). Listen for a connection with UUID Support"},
		{Name: "python/meterpreter/reverse_http", Desc: "                    Run a meterpreter server in Python (2.5-2.7 & 3.1-3.6). Tunnel communication over HTTP"},
		{Name: "python/meterpreter/reverse_https", Desc: "                   Run a meterpreter server in Python (2.5-2.7 & 3.1-3.6). Tunnel communication over HTTP using SSL"},
		{Name: "python/meterpreter/reverse_tcp", Desc: "                     Run a meterpreter server in Python (2.5-2.7 & 3.1-3.6). Connect back to the attacker"},
		{Name: "python/meterpreter/reverse_tcp_ssl", Desc: "                 Run a meterpreter server in Python (2.5-2.7 & 3.1-3.6). Reverse Python connect back stager using SSL"},
		{Name: "python/meterpreter/reverse_tcp_uuid", Desc: "                Run a meterpreter server in Python (2.5-2.7 & 3.1-3.6). Connect back to the attacker with UUID Support"},
		{Name: "python/meterpreter_bind_tcp", Desc: "                        Connect to the victim and spawn a Meterpreter shell"},
		{Name: "python/meterpreter_reverse_http", Desc: "                    Connect back to the attacker and spawn a Meterpreter shell"},
		{Name: "python/meterpreter_reverse_https", Desc: "                   Connect back to the attacker and spawn a Meterpreter shell"},
		{Name: "python/meterpreter_reverse_tcp", Desc: "                     Connect back to the attacker and spawn a Meterpreter shell"},
		{Name: "python/pingback_bind_tcp", Desc: "                           Listens for a connection from the attacker, sends a UUID, then terminates"},
		{Name: "python/pingback_reverse_tcp", Desc: "                        Connects back to the attacker, sends a UUID, then terminates"},
		{Name: "python/shell_bind_tcp", Desc: "                              Creates an interactive shell via python, encodes with base64 by design"},
		{Name: "python/shell_reverse_tcp", Desc: "                           Creates an interactive shell via python, encodes with base64 by design. Compatible with Python 2.3.3"},
		{Name: "python/shell_reverse_tcp_ssl", Desc: "                       Creates an interactive shell via python, uses SSL, encodes with base64 by design."},
		{Name: "python/shell_reverse_udp", Desc: "                           Creates an interactive shell via python, encodes with base64 by design. Compatible with Python 2.3.3"},
		{Name: "r/shell_bind_tcp", Desc: "                                   Continually listen for a connection and spawn a command shell via R"},
		{Name: "r/shell_reverse_tcp", Desc: "                                Connect back and create a command shell via R"},
		{Name: "ruby/pingback_bind_tcp", Desc: "                             Listens for a connection from the attacker, sends a UUID, then terminates"},
		{Name: "ruby/pingback_reverse_tcp", Desc: "                          Connect back to the attacker, sends a UUID, then terminates"},
		{Name: "ruby/shell_bind_tcp", Desc: "                                Continually listen for a connection and spawn a command shell via Ruby"},
		{Name: "ruby/shell_bind_tcp_ipv6", Desc: "                           Continually listen for a connection and spawn a command shell via Ruby"},
		{Name: "ruby/shell_reverse_tcp", Desc: "                             Connect back and create a command shell via Ruby"},
		{Name: "ruby/shell_reverse_tcp_ssl", Desc: "                         Connect back and create a command shell via Ruby, uses SSL"},
		{Name: "solaris/sparc/shell_bind_tcp", Desc: "                       Listen for a connection and spawn a command shell"},
		{Name: "solaris/sparc/shell_find_port", Desc: "                      Spawn a shell on an established connection"},
		{Name: "solaris/sparc/shell_reverse_tcp", Desc: "                    Connect back to attacker and spawn a command shell"},
		{Name: "solaris/x86/shell_bind_tcp", Desc: "                         Listen for a connection and spawn a command shell"},
		{Name: "solaris/x86/shell_find_port", Desc: "                        Spawn a shell on an established connection"},
		{Name: "solaris/x86/shell_reverse_tcp", Desc: "                      Connect back to attacker and spawn a command shell"},
		{Name: "tty/unix/interact", Desc: "                                  Interacts with a TTY on an established socket connection"},
		{Name: "windows/adduser", Desc: "                                    Create a new user and add them to local administration group. Note: The specified password is checked for com. ...lexity check: 8-14 chars (1 UPPER, 1 lower, 1 digit/special)"},
		{Name: "windows/dllinject/bind_hidden_ipknock_tcp", Desc: "          Inject a DLL via a reflective loader. Listen for a connection. First, the port will...at you could get your shellcode f...g to hide the shellcode"},
		{Name: "windows/dllinject/bind_hidden_tcp", Desc: "                  Inject a DLL via a reflective loader. Listen for a connection from a hidden port and spawn a command shell to the allowed host."},
		{Name: "windows/dllinject/bind_ipv6_tcp", Desc: "                    Inject a DLL via a reflective loader. Listen for an IPv6 connection (Windows x86)"},
		{Name: "windows/dllinject/bind_ipv6_tcp_uuid", Desc: "               Inject a DLL via a reflective loader. Listen for an IPv6 connection with UUID Support (Windows x86)"},
		{Name: "windows/dllinject/bind_named_pipe", Desc: "                  Inject a DLL via a reflective loader. Listen for a pipe connection (Windows x86)"},
		{Name: "windows/dllinject/bind_nonx_tcp", Desc: "                    Inject a DLL via a reflective loader. Listen for a connection (No NX)"},
		{Name: "windows/dllinject/bind_tcp", Desc: "                         Inject a DLL via a reflective loader. Listen for a connection (Windows x86)"},
		{Name: "windows/dllinject/bind_tcp_rc4", Desc: "                     Inject a DLL via a reflective loader. Listen for a connection"},
		{Name: "windows/dllinject/bind_tcp_uuid", Desc: "                    Inject a DLL via a reflective loader. Listen for a connection with UUID Support (Windows x86)"},
		{Name: "windows/dllinject/find_tag", Desc: "                         Inject a DLL via a reflective loader. Use an established connection"},
		{Name: "windows/dllinject/reverse_hop_http", Desc: "                 Inject a DLL via a reflective loader. Tunnel communication over an HTTP or HTTPS hop point. Note that you must first upload data/hop/hop.php to the PHP server you wish to use as a hop."},
		{Name: "windows/dllinject/reverse_http", Desc: "                     Inject a DLL via a reflective loader. Tunnel communication over HTTP (Windows wininet)"},
		{Name: "windows/dllinject/reverse_http_proxy_pstore", Desc: "        Inject a DLL via a reflective loader. Tunnel communication over HTTP"},
		{Name: "windows/dllinject/reverse_ipv6_tcp", Desc: "                 Inject a DLL via a reflective loader. Connect back to the attacker over IPv6"},
		{Name: "windows/dllinject/reverse_nonx_tcp", Desc: "                 Inject a DLL via a reflective loader. Connect back to the attacker (No NX)"},
		{Name: "windows/dllinject/reverse_ord_tcp", Desc: "                  Inject a DLL via a reflective loader. Connect back to the attacker"},
		{Name: "windows/dllinject/reverse_tcp", Desc: "                      Inject a DLL via a reflective loader. Connect back to the attacker"},
		{Name: "windows/dllinject/reverse_tcp_allports", Desc: "             Inject a DLL via a reflective loader. Try to connect back to the attacker, on all possible ports (1-65535, slowly)"},
		{Name: "windows/dllinject/reverse_tcp_dns", Desc: "                  Inject a DLL via a reflective loader. Connect back to the attacker"},
		{Name: "windows/dllinject/reverse_tcp_rc4", Desc: "                  Inject a DLL via a reflective loader. Connect back to the attacker"},
		{Name: "windows/dllinject/reverse_tcp_rc4_dns", Desc: "              Inject a DLL via a reflective loader. Connect back to the attacker"},
		{Name: "windows/dllinject/reverse_tcp_uuid", Desc: "                 Inject a DLL via a reflective loader. Connect back to the attacker with UUID Support"},
		{Name: "windows/dllinject/reverse_winhttp", Desc: "                  Inject a DLL via a reflective loader. Tunnel communication over HTTP (Windows winhttp)"},
		{Name: "windows/dns_txt_query_exec", Desc: "                         Performs a TXT query against a series of DNS record(s) and executes the returned payload"},
		{Name: "windows/download_exec", Desc: "                              Download an EXE from an HTTP(S)/FTP URL and execute it"},
		{Name: "windows/exec", Desc: "                                       Execute an arbitrary command"},
		{Name: "windows/format_all_drives", Desc: "                          This payload formats all mounted disks in Windows (aka ShellcodeOfDeath). After formatting, this payload se...ccess a drive for any reason, it skips the drive and proceeds to the next volume."},
		{Name: "windows/loadlibrary", Desc: "                                Load an arbitrary library path"},
		{Name: "windows/messagebox", Desc: "                                 Spawns a dialog via MessageBox using a customizable title, text & icon"},
		{Name: "windows/meterpreter/bind_hidden_ipknock_tcp", Desc: "        Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged). Listen for a connection. First, the.....helping to hide the shellcode"},
		{Name: "windows/meterpreter/bind_hidden_tcp", Desc: "                Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged). Listen for a connection from a hidden port and spawn a command shell to the allowed host."},
		{Name: "windows/meterpreter/bind_ipv6_tcp", Desc: "                  Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged). Listen for an IPv6 connection (Windows x86)"},
		{Name: "windows/meterpreter/bind_ipv6_tcp_uuid", Desc: "             Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged). Listen for an IPv6 connection with UUID Support (Windows x86)"},
		{Name: "windows/meterpreter/bind_named_pipe", Desc: "                Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged). Listen for a pipe connection (Windows x86)"},
		{Name: "windows/meterpreter/bind_nonx_tcp", Desc: "                  Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged). Listen for a connection (No NX)"},
		{Name: "windows/meterpreter/bind_tcp", Desc: "                       Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged). Listen for a connection (Windows x86)"},
		{Name: "windows/meterpreter/bind_tcp_rc4", Desc: "                   Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged). Listen for a connection"},
		{Name: "windows/meterpreter/bind_tcp_uuid", Desc: "                  Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged). Listen for a connection with UUID Support (Windows x86)"},
		{Name: "windows/meterpreter/find_tag", Desc: "                       Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged). Use an established connection"},
		{Name: "windows/meterpreter/reverse_hop_http", Desc: "               Inject the meterpreter server DLL via the Reflective Dll Injection payl... wish to use as a hop."},
		{Name: "windows/meterpreter/reverse_http", Desc: "                   Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged). Tunnel communication over HTTP (Windows wininet)"},
		{Name: "windows/meterpreter/reverse_http_proxy_pstore", Desc: "      Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged). Tunnel communication over HTTP"},
		{Name: "windows/meterpreter/reverse_https", Desc: "                  Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged). Tunnel communication over HTTPS (Windows wininet)"},
		{Name: "windows/meterpreter/reverse_https_proxy", Desc: "            Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged). Tunnel communication over HTTP using SSL with custom proxy support"},
		{Name: "windows/meterpreter/reverse_ipv6_tcp", Desc: "               Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged). Connect back to the attacker over IPv6"},
		{Name: "windows/meterpreter/reverse_named_pipe", Desc: "             Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged). Connect back to the attacker via a named pipe pivot"},
		{Name: "windows/meterpreter/reverse_nonx_tcp", Desc: "               Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged). Connect back to the attacker (No NX)"},
		{Name: "windows/meterpreter/reverse_ord_tcp", Desc: "                Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged). Connect back to the attacker"},
		{Name: "windows/meterpreter/reverse_tcp", Desc: "                    Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged). Connect back to the attacker"},
		{Name: "windows/meterpreter/reverse_tcp_allports", Desc: "           Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged). Try to connect back to the attacker, on all possible ports (1-65535, slowly)"},
		{Name: "windows/meterpreter/reverse_tcp_dns", Desc: "                Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged). Connect back to the attacker"},
		{Name: "windows/meterpreter/reverse_tcp_rc4", Desc: "                Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged). Connect back to the attacker"},
		{Name: "windows/meterpreter/reverse_tcp_rc4_dns", Desc: "            Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged). Connect back to the attacker"},
		{Name: "windows/meterpreter/reverse_tcp_uuid", Desc: "               Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged). Connect back to the attacker with UUID Support"},
		{Name: "windows/meterpreter/reverse_winhttp", Desc: "                Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged). Tunnel communication over HTTP (Windows winhttp)"},
		{Name: "windows/meterpreter/reverse_winhttps", Desc: "               Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged). Tunnel communication over HTTPS (Windows winhttp)"},
		{Name: "windows/meterpreter_bind_named_pipe", Desc: "                Connect to victim and spawn a Meterpreter shell"},
		{Name: "windows/meterpreter_bind_tcp", Desc: "                       Connect to victim and spawn a Meterpreter shell"},
		{Name: "windows/meterpreter_reverse_http", Desc: "                   Connect back to attacker and spawn a Meterpreter shell"},
		{Name: "windows/meterpreter_reverse_https", Desc: "                  Connect back to attacker and spawn a Meterpreter shell"},
		{Name: "windows/meterpreter_reverse_ipv6_tcp", Desc: "               Connect back to attacker and spawn a Meterpreter shell"},
		{Name: "windows/meterpreter_reverse_tcp", Desc: "                    Connect back to attacker and spawn a Meterpreter shell"},
		{Name: "windows/metsvc_bind_tcp", Desc: "                            Stub payload for interacting with a Meterpreter Service"},
		{Name: "windows/metsvc_reverse_tcp", Desc: "                         Stub payload for interacting with a Meterpreter Service"},
		{Name: "windows/patchupdllinject/bind_hidden_ipknock_tcp", Desc: "   Inject a custom DLL into the exploited process. Listen for a connection. First, the ...ike hping). After that you co...cket will appear as \"closed,\" thus helping to hide the shellcode"},
		{Name: "windows/patchupdllinject/bind_hidden_tcp", Desc: "           Inject a custom DLL into the exploited process. Listen for a connection from a hidden port and spawn a command shell to the allowed host."},
		{Name: "windows/patchupdllinject/bind_ipv6_tcp", Desc: "             Inject a custom DLL into the exploited process. Listen for an IPv6 connection (Windows x86)"},
		{Name: "windows/patchupdllinject/bind_ipv6_tcp_uuid", Desc: "        Inject a custom DLL into the exploited process. Listen for an IPv6 connection with UUID Support (Windows x86)"},
		{Name: "windows/patchupdllinject/bind_named_pipe", Desc: "           Inject a custom DLL into the exploited process. Listen for a pipe connection (Windows x86)"},
		{Name: "windows/patchupdllinject/bind_nonx_tcp", Desc: "             Inject a custom DLL into the exploited process. Listen for a connection (No NX)"},
		{Name: "windows/patchupdllinject/bind_tcp", Desc: "                  Inject a custom DLL into the exploited process. Listen for a connection (Windows x86)"},
		{Name: "windows/patchupdllinject/bind_tcp_rc4", Desc: "              Inject a custom DLL into the exploited process. Listen for a connection"},
		{Name: "windows/patchupdllinject/bind_tcp_uuid", Desc: "             Inject a custom DLL into the exploited process. Listen for a connection with UUID Support (Windows x86)"},
		{Name: "windows/patchupdllinject/find_tag", Desc: "                  Inject a custom DLL into the exploited process. Use an established connection"},
		{Name: "windows/patchupdllinject/reverse_ipv6_tcp", Desc: "          Inject a custom DLL into the exploited process. Connect back to the attacker over IPv6"},
		{Name: "windows/patchupdllinject/reverse_nonx_tcp", Desc: "          Inject a custom DLL into the exploited process. Connect back to the attacker (No NX)"},
		{Name: "windows/patchupdllinject/reverse_ord_tcp", Desc: "           Inject a custom DLL into the exploited process. Connect back to the attacker"},
		{Name: "windows/patchupdllinject/reverse_tcp", Desc: "               Inject a custom DLL into the exploited process. Connect back to the attacker"},
		{Name: "windows/patchupdllinject/reverse_tcp_allports", Desc: "      Inject a custom DLL into the exploited process. Try to connect back to the attacker, on all possible ports (1-65535, slowly)"},
		{Name: "windows/patchupdllinject/reverse_tcp_dns", Desc: "           Inject a custom DLL into the exploited process. Connect back to the attacker"},
		{Name: "windows/patchupdllinject/reverse_tcp_rc4", Desc: "           Inject a custom DLL into the exploited process. Connect back to the attacker"},
		{Name: "windows/patchupdllinject/reverse_tcp_rc4_dns", Desc: "       Inject a custom DLL into the exploited process. Connect back to the attacker"},
		{Name: "windows/patchupdllinject/reverse_tcp_uuid", Desc: "          Inject a custom DLL into the exploited process. Connect back to the attacker with UUID Support"},
		{Name: "windows/patchupmeterpreter/bind_hidden_ipknock_tcp", Desc: " Inject the meterpreter server DLL (staged). Listen for a connection. First, the port will need to be knocked from the IP..... The socket will appear as \"closed,\" thus helping to hide the shellcode"},
		{Name: "windows/patchupmeterpreter/bind_hidden_tcp", Desc: "         Inject the meterpreter server DLL (staged). Listen for a connection from a hidden port and spawn a command shell to the allowed host."},
		{Name: "windows/patchupmeterpreter/bind_ipv6_tcp", Desc: "           Inject the meterpreter server DLL (staged). Listen for an IPv6 connection (Windows x86)"},
		{Name: "windows/patchupmeterpreter/bind_ipv6_tcp_uuid", Desc: "      Inject the meterpreter server DLL (staged). Listen for an IPv6 connection with UUID Support (Windows x86)"},
		{Name: "windows/patchupmeterpreter/bind_named_pipe", Desc: "         Inject the meterpreter server DLL (staged). Listen for a pipe connection (Windows x86)"},
		{Name: "windows/patchupmeterpreter/bind_nonx_tcp", Desc: "           Inject the meterpreter server DLL (staged). Listen for a connection (No NX)"},
		{Name: "windows/patchupmeterpreter/bind_tcp", Desc: "                Inject the meterpreter server DLL (staged). Listen for a connection (Windows x86)"},
		{Name: "windows/patchupmeterpreter/bind_tcp_rc4", Desc: "            Inject the meterpreter server DLL (staged). Listen for a connection"},
		{Name: "windows/patchupmeterpreter/bind_tcp_uuid", Desc: "           Inject the meterpreter server DLL (staged). Listen for a connection with UUID Support (Windows x86)"},
		{Name: "windows/patchupmeterpreter/find_tag", Desc: "                Inject the meterpreter server DLL (staged). Use an established connection"},
		{Name: "windows/patchupmeterpreter/reverse_ipv6_tcp", Desc: "        Inject the meterpreter server DLL (staged). Connect back to the attacker over IPv6"},
		{Name: "windows/patchupmeterpreter/reverse_nonx_tcp", Desc: "        Inject the meterpreter server DLL (staged). Connect back to the attacker (No NX)"},
		{Name: "windows/patchupmeterpreter/reverse_ord_tcp", Desc: "         Inject the meterpreter server DLL (staged). Connect back to the attacker"},
		{Name: "windows/patchupmeterpreter/reverse_tcp", Desc: "             Inject the meterpreter server DLL (staged). Connect back to the attacker"},
		{Name: "windows/patchupmeterpreter/reverse_tcp_allports", Desc: "    Inject the meterpreter server DLL (staged). Try to connect back to the attacker, on all possible ports (1-65535, slowly)"},
		{Name: "windows/patchupmeterpreter/reverse_tcp_dns", Desc: "         Inject the meterpreter server DLL (staged). Connect back to the attacker"},
		{Name: "windows/patchupmeterpreter/reverse_tcp_rc4", Desc: "         Inject the meterpreter server DLL (staged). Connect back to the attacker"},
		{Name: "windows/patchupmeterpreter/reverse_tcp_rc4_dns", Desc: "     Inject the meterpreter server DLL (staged). Connect back to the attacker"},
		{Name: "windows/patchupmeterpreter/reverse_tcp_uuid", Desc: "        Inject the meterpreter server DLL (staged). Connect back to the attacker with UUID Support"},
		{Name: "windows/pingback_bind_tcp", Desc: "                          Open a socket and report UUID when a connection is received (Windows x86)"},
		{Name: "windows/pingback_reverse_tcp", Desc: "                       Connect back to attacker and report UUID (Windows x86)"},
		{Name: "windows/powershell_bind_tcp", Desc: "                        Listen for a connection and spawn an interactive powershell session"},
		{Name: "windows/powershell_reverse_tcp", Desc: "                     Listen for a connection and spawn an interactive powershell session"},
		{Name: "windows/shell/bind_hidden_ipknock_tcp", Desc: "              Spawn a piped command shell (staged). Listen for a connection. First, the port will need ....he shellcode"},
		{Name: "windows/shell/bind_hidden_tcp", Desc: "                      Spawn a piped command shell (staged). Listen for a connection from a hidden port and spawn a command shell to the allowed host."},
		{Name: "windows/shell/bind_ipv6_tcp", Desc: "                        Spawn a piped command shell (staged). Listen for an IPv6 connection (Windows x86)"},
		{Name: "windows/shell/bind_ipv6_tcp_uuid", Desc: "                   Spawn a piped command shell (staged). Listen for an IPv6 connection with UUID Support (Windows x86)"},
		{Name: "windows/shell/bind_named_pipe", Desc: "                      Spawn a piped command shell (staged). Listen for a pipe connection (Windows x86)"},
		{Name: "windows/shell/bind_nonx_tcp", Desc: "                        Spawn a piped command shell (staged). Listen for a connection (No NX)"},
		{Name: "windows/shell/bind_tcp", Desc: "                             Spawn a piped command shell (staged). Listen for a connection (Windows x86)"},
		{Name: "windows/shell/bind_tcp_rc4", Desc: "                         Spawn a piped command shell (staged). Listen for a connection"},
		{Name: "windows/shell/bind_tcp_uuid", Desc: "                        Spawn a piped command shell (staged). Listen for a connection with UUID Support (Windows x86)"},
		{Name: "windows/shell/find_tag", Desc: "                             Spawn a piped command shell (staged). Use an established connection"},
		{Name: "windows/shell/reverse_ipv6_tcp", Desc: "                     Spawn a piped command shell (staged). Connect back to the attacker over IPv6"},
		{Name: "windows/shell/reverse_nonx_tcp", Desc: "                     Spawn a piped command shell (staged). Connect back to the attacker (No NX)"},
		{Name: "windows/shell/reverse_ord_tcp", Desc: "                      Spawn a piped command shell (staged). Connect back to the attacker"},
		{Name: "windows/shell/reverse_tcp", Desc: "                          Spawn a piped command shell (staged). Connect back to the attacker"},
		{Name: "windows/shell/reverse_tcp_allports", Desc: "                 Spawn a piped command shell (staged). Try to connect back to the attacker, on all possible ports (1-65535, slowly)"},
		{Name: "windows/shell/reverse_tcp_dns", Desc: "                      Spawn a piped command shell (staged). Connect back to the attacker"},
		{Name: "windows/shell/reverse_tcp_rc4", Desc: "                      Spawn a piped command shell (staged). Connect back to the attacker"},
		{Name: "windows/shell/reverse_tcp_rc4_dns", Desc: "                  Spawn a piped command shell (staged). Connect back to the attacker"},
		{Name: "windows/shell/reverse_tcp_uuid", Desc: "                     Spawn a piped command shell (staged). Connect back to the attacker with UUID Support"},
		{Name: "windows/shell/reverse_udp", Desc: "                          Spawn a piped command shell (staged). Connect back to the attacker with UUID Support"},
		{Name: "windows/shell_bind_tcp", Desc: "                             Listen for a connection and spawn a command shell"},
		{Name: "windows/shell_bind_tcp_xpfw", Desc: "                        Disable the Windows ICF, then listen for a connection and spawn a command shell"},
		{Name: "windows/shell_hidden_bind_tcp", Desc: "                      Listen for a connection from certain IP and spawn a command shell. The shellcode will reply with a RST packet if the conne..\" helping us to hide the shellcode."},
		{Name: "windows/shell_reverse_tcp", Desc: "                          Connect back to attacker and spawn a command shell"},
		{Name: "windows/speak_pwned", Desc: "                                Causes the target to say \"You Got Pwned\" via the Windows Speech API"},
		{Name: "windows/upexec/bind_hidden_ipknock_tcp", Desc: "             Uploads an executable and runs it (staged). Listen for a connection. First, the port will need to be knock...... h. will appear as \"closed,\" thus helping to hide the shellcode"},
		{Name: "windows/upexec/bind_hidden_tcp", Desc: "                     Uploads an executable and runs it (staged). Listen for a connection from a hidden port and spawn a command shell to the allowed host."},
		{Name: "windows/upexec/bind_ipv6_tcp", Desc: "                       Uploads an executable and runs it (staged). Listen for an IPv6 connection (Windows x86)"},
		{Name: "windows/upexec/bind_ipv6_tcp_uuid", Desc: "                  Uploads an executable and runs it (staged). Listen for an IPv6 connection with UUID Support (Windows x86)"},
		{Name: "windows/upexec/bind_named_pipe", Desc: "                     Uploads an executable and runs it (staged). Listen for a pipe connection (Windows x86)"},
		{Name: "windows/upexec/bind_nonx_tcp", Desc: "                       Uploads an executable and runs it (staged). Listen for a connection (No NX)"},
		{Name: "windows/upexec/bind_tcp", Desc: "                            Uploads an executable and runs it (staged). Listen for a connection (Windows x86)"},
		{Name: "windows/upexec/bind_tcp_rc4", Desc: "                        Uploads an executable and runs it (staged). Listen for a connection"},
		{Name: "windows/upexec/bind_tcp_uuid", Desc: "                       Uploads an executable and runs it (staged). Listen for a connection with UUID Support (Windows x86)"},
		{Name: "windows/upexec/find_tag", Desc: "                            Uploads an executable and runs it (staged). Use an established connection"},
		{Name: "windows/upexec/reverse_ipv6_tcp", Desc: "                    Uploads an executable and runs it (staged). Connect back to the attacker over IPv6"},
		{Name: "windows/upexec/reverse_nonx_tcp", Desc: "                    Uploads an executable and runs it (staged). Connect back to the attacker (No NX)"},
		{Name: "windows/upexec/reverse_ord_tcp", Desc: "                     Uploads an executable and runs it (staged). Connect back to the attacker"},
		{Name: "windows/upexec/reverse_tcp", Desc: "                         Uploads an executable and runs it (staged). Connect back to the attacker"},
		{Name: "windows/upexec/reverse_tcp_allports", Desc: "                Uploads an executable and runs it (staged). Try to connect back to the attacker, on all possible ports (1-65535, slowly)"},
		{Name: "windows/upexec/reverse_tcp_dns", Desc: "                     Uploads an executable and runs it (staged). Connect back to the attacker"},
		{Name: "windows/upexec/reverse_tcp_rc4", Desc: "                     Uploads an executable and runs it (staged). Connect back to the attacker"},
		{Name: "windows/upexec/reverse_tcp_rc4_dns", Desc: "                 Uploads an executable and runs it (staged). Connect back to the attacker"},
		{Name: "windows/upexec/reverse_tcp_uuid", Desc: "                    Uploads an executable and runs it (staged). Connect back to the attacker with UUID Support"},
		{Name: "windows/upexec/reverse_udp", Desc: "                         Uploads an executable and runs it (staged). Connect back to the attacker with UUID Support"},
		{Name: "windows/vncinject/bind_hidden_ipknock_tcp", Desc: "          Inject a VNC Dll via a reflective loader (staged). Listen for a connection. First, the port will need to be k... hping). After that you could get yo...closed,\" thus helping to hide the shellcode"},
		{Name: "windows/vncinject/bind_hidden_tcp", Desc: "                  Inject a VNC Dll via a reflective loader (staged). Listen for a connection from a hidden port and spawn a command shell to the allowed host."},
		{Name: "windows/vncinject/bind_ipv6_tcp", Desc: "                    Inject a VNC Dll via a reflective loader (staged). Listen for an IPv6 connection (Windows x86)"},
		{Name: "windows/vncinject/bind_ipv6_tcp_uuid", Desc: "               Inject a VNC Dll via a reflective loader (staged). Listen for an IPv6 connection with UUID Support (Windows x86)"},
		{Name: "windows/vncinject/bind_named_pipe", Desc: "                  Inject a VNC Dll via a reflective loader (staged). Listen for a pipe connection (Windows x86)"},
		{Name: "windows/vncinject/bind_nonx_tcp", Desc: "                    Inject a VNC Dll via a reflective loader (staged). Listen for a connection (No NX)"},
		{Name: "windows/vncinject/bind_tcp", Desc: "                         Inject a VNC Dll via a reflective loader (staged). Listen for a connection (Windows x86)"},
		{Name: "windows/vncinject/bind_tcp_rc4", Desc: "                     Inject a VNC Dll via a reflective loader (staged). Listen for a connection"},
		{Name: "windows/vncinject/bind_tcp_uuid", Desc: "                    Inject a VNC Dll via a reflective loader (staged). Listen for a connection with UUID Support (Windows x86)"},
		{Name: "windows/vncinject/find_tag", Desc: "                         Inject a VNC Dll via a reflective loader (staged). Use an established connection"},
		{Name: "windows/vncinject/reverse_hop_http", Desc: "                 Inject a VNC Dll via a reflective loader (staged). Tunnel communication over an HTTP or HTTPS hop point. Note that you must first upload data/hop/hop.php to the PHP server you wish to use as a hop."},
		{Name: "windows/vncinject/reverse_http", Desc: "                     Inject a VNC Dll via a reflective loader (staged). Tunnel communication over HTTP (Windows wininet)"},
		{Name: "windows/vncinject/reverse_http_proxy_pstore", Desc: "        Inject a VNC Dll via a reflective loader (staged). Tunnel communication over HTTP"},
		{Name: "windows/vncinject/reverse_ipv6_tcp", Desc: "                 Inject a VNC Dll via a reflective loader (staged). Connect back to the attacker over IPv6"},
		{Name: "windows/vncinject/reverse_nonx_tcp", Desc: "                 Inject a VNC Dll via a reflective loader (staged). Connect back to the attacker (No NX)"},
		{Name: "windows/vncinject/reverse_ord_tcp", Desc: "                  Inject a VNC Dll via a reflective loader (staged). Connect back to the attacker"},
		{Name: "windows/vncinject/reverse_tcp", Desc: "                      Inject a VNC Dll via a reflective loader (staged). Connect back to the attacker"},
		{Name: "windows/vncinject/reverse_tcp_allports", Desc: "             Inject a VNC Dll via a reflective loader (staged). Try to connect back to the attacker, on all possible ports (1-65535, slowly)"},
		{Name: "windows/vncinject/reverse_tcp_dns", Desc: "                  Inject a VNC Dll via a reflective loader (staged). Connect back to the attacker"},
		{Name: "windows/vncinject/reverse_tcp_rc4", Desc: "                  Inject a VNC Dll via a reflective loader (staged). Connect back to the attacker"},
		{Name: "windows/vncinject/reverse_tcp_rc4_dns", Desc: "              Inject a VNC Dll via a reflective loader (staged). Connect back to the attacker"},
		{Name: "windows/vncinject/reverse_tcp_uuid", Desc: "                 Inject a VNC Dll via a reflective loader (staged). Connect back to the attacker with UUID Support"},
		{Name: "windows/vncinject/reverse_winhttp", Desc: "                  Inject a VNC Dll via a reflective loader (staged). Tunnel communication over HTTP (Windows winhttp)"},
		{Name: "windows/x64/exec", Desc: "                                   Execute an arbitrary command (Windows x64)"},
		{Name: "windows/x64/loadlibrary", Desc: "                            Load an arbitrary x64 library path"},
		{Name: "windows/x64/messagebox", Desc: "                             Spawn a dialog via MessageBox using a customizable title, text & icon"},
		{Name: "windows/x64/meterpreter/bind_ipv6_tcp", Desc: "              Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged x64). Listen for an IPv6 connection (Windows x64)"},
		{Name: "windows/x64/meterpreter/bind_ipv6_tcp_uuid", Desc: "         Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged x64). Listen for an IPv6 connection with UUID Support (Windows x64)"},
		{Name: "windows/x64/meterpreter/bind_named_pipe", Desc: "            Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged x64). Listen for a pipe connection (Windows x64)"},
		{Name: "windows/x64/meterpreter/bind_tcp", Desc: "                   Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged x64). Listen for a connection (Windows x64)"},
		{Name: "windows/x64/meterpreter/bind_tcp_rc4", Desc: "               Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged x64). Connect back to the attacker"},
		{Name: "windows/x64/meterpreter/bind_tcp_uuid", Desc: "              Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged x64). Listen for a connection with UUID Support (Windows x64)"},
		{Name: "windows/x64/meterpreter/reverse_http", Desc: "               Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged x64). Tunnel communication over HTTP (Windows x64 wininet)"},
		{Name: "windows/x64/meterpreter/reverse_https", Desc: "              Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged x64). Tunnel communication over HTTP (Windows x64 wininet)"},
		{Name: "windows/x64/meterpreter/reverse_named_pipe", Desc: "         Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged x64). Connect back to the attacker via a named pipe pivot"},
		{Name: "windows/x64/meterpreter/reverse_tcp", Desc: "                Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged x64). Connect back to the attacker (Windows x64)"},
		{Name: "windows/x64/meterpreter/reverse_tcp_rc4", Desc: "            Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged x64). Connect back to the attacker"},
		{Name: "windows/x64/meterpreter/reverse_tcp_uuid", Desc: "           Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged x64). Connect back to the attacker with UUID Support (Windows x64)"},
		{Name: "windows/x64/meterpreter/reverse_winhttp", Desc: "            Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged x64). Tunnel communication over HTTP (Windows x64 winhttp)"},
		{Name: "windows/x64/meterpreter/reverse_winhttps", Desc: "           Inject the meterpreter server DLL via the Reflective Dll Injection payload (staged x64). Tunnel communication over HTTPS (Windows x64 winhttp)"},
		{Name: "windows/x64/meterpreter_bind_named_pipe", Desc: "            Connect to victim and spawn a Meterpreter shell"},
		{Name: "windows/x64/meterpreter_bind_tcp", Desc: "                   Connect to victim and spawn a Meterpreter shell"},
		{Name: "windows/x64/meterpreter_reverse_http", Desc: "               Connect back to attacker and spawn a Meterpreter shell"},
		{Name: "windows/x64/meterpreter_reverse_https", Desc: "              Connect back to attacker and spawn a Meterpreter shell"},
		{Name: "windows/x64/meterpreter_reverse_ipv6_tcp", Desc: "           Connect back to attacker and spawn a Meterpreter shell"},
		{Name: "windows/x64/meterpreter_reverse_tcp", Desc: "                Connect back to attacker and spawn a Meterpreter shell"},
		{Name: "windows/x64/pingback_reverse_tcp", Desc: "                   Connect back to attacker and report UUID (Windows x64)"},
		{Name: "windows/x64/powershell_bind_tcp", Desc: "                    Listen for a connection and spawn an interactive powershell session"},
		{Name: "windows/x64/powershell_reverse_tcp", Desc: "                 Listen for a connection and spawn an interactive powershell session"},
		{Name: "windows/x64/shell/bind_ipv6_tcp", Desc: "                    Spawn a piped command shell (Windows x64) (staged). Listen for an IPv6 connection (Windows x64)"},
		{Name: "windows/x64/shell/bind_ipv6_tcp_uuid", Desc: "               Spawn a piped command shell (Windows x64) (staged). Listen for an IPv6 connection with UUID Support (Windows x64)"},
		{Name: "windows/x64/shell/bind_named_pipe", Desc: "                  Spawn a piped command shell (Windows x64) (staged). Listen for a pipe connection (Windows x64)"},
		{Name: "windows/x64/shell/bind_tcp", Desc: "                         Spawn a piped command shell (Windows x64) (staged). Listen for a connection (Windows x64)"},
		{Name: "windows/x64/shell/bind_tcp_rc4", Desc: "                     Spawn a piped command shell (Windows x64) (staged). Connect back to the attacker"},
		{Name: "windows/x64/shell/bind_tcp_uuid", Desc: "                    Spawn a piped command shell (Windows x64) (staged). Listen for a connection with UUID Support (Windows x64)"},
		{Name: "windows/x64/shell/reverse_tcp", Desc: "                      Spawn a piped command shell (Windows x64) (staged). Connect back to the attacker (Windows x64)"},
		{Name: "windows/x64/shell/reverse_tcp_rc4", Desc: "                  Spawn a piped command shell (Windows x64) (staged). Connect back to the attacker"},
		{Name: "windows/x64/shell/reverse_tcp_uuid", Desc: "                 Spawn a piped command shell (Windows x64) (staged). Connect back to the attacker with UUID Support (Windows x64)"},
		{Name: "windows/x64/shell_bind_tcp", Desc: "                         Listen for a connection and spawn a command shell (Windows x64)"},
		{Name: "windows/x64/shell_reverse_tcp", Desc: "                      Connect back to attacker and spawn a command shell (Windows x64)"},
		{Name: "windows/x64/vncinject/bind_ipv6_tcp", Desc: "                Inject a VNC Dll via a reflective loader (Windows x64) (staged). Listen for an IPv6 connection (Windows x64)"},
		{Name: "windows/x64/vncinject/bind_ipv6_tcp_uuid", Desc: "           Inject a VNC Dll via a reflective loader (Windows x64) (staged). Listen for an IPv6 connection with UUID Support (Windows x64)"},
		{Name: "windows/x64/vncinject/bind_named_pipe", Desc: "              Inject a VNC Dll via a reflective loader (Windows x64) (staged). Listen for a pipe connection (Windows x64)"},
		{Name: "windows/x64/vncinject/bind_tcp", Desc: "                     Inject a VNC Dll via a reflective loader (Windows x64) (staged). Listen for a connection (Windows x64)"},
		{Name: "windows/x64/vncinject/bind_tcp_rc4", Desc: "                 Inject a VNC Dll via a reflective loader (Windows x64) (staged). Connect back to the attacker"},
		{Name: "windows/x64/vncinject/bind_tcp_uuid", Desc: "                Inject a VNC Dll via a reflective loader (Windows x64) (staged). Listen for a connection with UUID Support (Windows x64)"},
		{Name: "windows/x64/vncinject/reverse_http", Desc: "                 Inject a VNC Dll via a reflective loader (Windows x64) (staged). Tunnel communication over HTTP (Windows x64 wininet)"},
		{Name: "windows/x64/vncinject/reverse_https", Desc: "                Inject a VNC Dll via a reflective loader (Windows x64) (staged). Tunnel communication over HTTP (Windows x64 wininet)"},
		{Name: "windows/x64/vncinject/reverse_tcp", Desc: "                  Inject a VNC Dll via a reflective loader (Windows x64) (staged). Connect back to the attacker (Windows x64)"},
		{Name: "windows/x64/vncinject/reverse_tcp_rc4", Desc: "              Inject a VNC Dll via a reflective loader (Windows x64) (staged). Connect back to the attacker"},
		{Name: "windows/x64/vncinject/reverse_tcp_uuid", Desc: "             Inject a VNC Dll via a reflective loader (Windows x64) (staged). Connect back to the attacker with UUID Support (Windows x64)"},
		{Name: "windows/x64/vncinject/reverse_winhttp", Desc: "              Inject a VNC Dll via a reflective loader (Windows x64) (staged). Tunnel communication over HTTP (Windows x64 winhttp)"},
		{Name: "windows/x64/vncinject/reverse_winhttps", Desc: "             Inject a VNC Dll via a reflective loader (Windows x64) (staged). Tunnel communication over HTTPS (Windows x64 winhttp)"},
	}
)

func (pays Pays) Fields(ix int) (o []Pay) {
	used := make(map[string]bool)
	for _, i := range pays {
		fields := strings.Split(i.Name, "/")

		if ix < len(fields) {
			if _, ok := used[fields[ix]]; ok {
				continue
			}
			m := i.Desc
			if len(i.Desc) > 30 {
				m = i.Desc[:26] + "..."
			}
			o = append(o, Pay{
				Name: fields[ix],
				Desc: "Used in " + strings.TrimSpace(m),
			})
			used[fields[ix]] = true
		}
	}
	return
}
